.model small

MPrintString macro string
	push ax
	push dx
	mov ah,09h
		mov dx,offset string
	int 21h
	pop dx
	pop ax
endm

.stack
.data
; VAR
	machten10 dw 1000, 100, 10, 1
	endl db 10, 13, '$'
.code
.startup
	mov ah, 1
		int 21h
	MPrintString endl
	test al, 0FFh
	jnz notanarrow
	mov ah, 07h
		int 21h
notanarrow:
	cbw
	push ax
	call PrintCard4
.exit

PrintCard4 proc near
	push bp				; save previous base pointer
	mov bp,sp			; update base pointer
	push ax				; saving context
		push dx
		push cx
		push si
		push di
	mov bx,[bp+4]		; get cardinal to print
	test bx, 0FFFFh
	jnz nietnul
	mov ah, 02h			; behandel welnul
		mov dl, '0'
		int 21h
	jmp gedaan
nietnul:
	mov si, offset machten10
volgendcijfer:
	cmp bx, [si]
	jge huidigcijfer
	add si, 2
	jmp volgendcijfer
huidigcijfer:
	mov ax, bx
	cwd
	div word ptr [si]	; deel door macht van 10, res in ax
	mov bx, dx			; rest in bx
	mov dl, al			; resultaat in dl
	add dl, 48			; cijfer naar ascii teken, print teken
		mov ah, 2
		int 21h	
	cmp word ptr [si], 1	; laatste cijfer?	
	je gedaan
	add si, 2
	jmp huidigcijfer
gedaan:
	pop di				; restore context
		pop si
		pop cx
		pop dx
		pop ax
    pop bp				; restore bp
    ret 4				; return and freeing param from stack (4 bytes)
PrintCard4 endp

end